iT邦幫忙

2023 iThome 鐵人賽

DAY 20
0
自我挑戰組

Rails 手工打造自己的部落格 系列 第 20

Rails 手工打造自己的部落格 20-會員系統

  • 分享至 

  • xImage
  •  

我們今天可以來做會員系統
雖然自己的網站用戶可能只有自己,
但畢竟跟來訪的遊客相比來說,還是會有權限之分
所以必須要有判斷的依據
那我們今天也是手刻
先從基本的 CRUD 開始

Routes

我們不需要 show 跟 destroy

 resources :users, except:[:index, :destroy]

Model

做一個 User 的 model
欄位就簡短的給 1.名字 2.信箱 3.密碼 
這裡要用email來做唯一値,以防大家用同樣的信箱來註冊
或是可以當成 user 除了 id 以外的搜尋主鍵

Model:user
- name : string
- email : string
- password:string
                                    #uniq 不能重複
rails g model User name email:string:uniq password

↓ table下面會長出 ↓
#加索引, unique唯一值
add_index :users, :email, unique: true 

Model驗證 email 格式

validates :email, presence: true,   #必填
                  uniqueness: true, #不重複寫入
                  format: {         # 格式
                      with: URI::MailTo::EMAIL_REGEXP,
                      message: '格式有誤'
                    }

Controller

rails g controller users

現在只要做註冊跟編輯,
而註冊其實就是創造使用者

before_action :set_user, only: [:edit, :update]
 
  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      rederect_to root_path, notice: '註冊成功'
    else
      render :new
    end
  end

  def edit
  end

  def update 
    @user.update(user_params)
    rederect_to root_path , notice:'更新成功!'
  end
  
  private

  def user_params
    params.require(:user).permit(:name, :email, :password)
  end

  def set_user
    @user = User.find(params[:id])
  end

View

view 跟文章的表單差不多,也是使用 form helper ,
然後表單做一個 partial render

  • new.html.erb
<%= render 'form' %>
  • edit.html.erb
<%= render 'form' %>
  • _form.html.erb
<%= form_with(model: @user, data: { turbo: false }) do |f| %>
  <div>
    <%= f.label :name%>
    <%= f.text_field :name%>
  </div>

  <div>
    <%= f.label :email%>
    <%= f.email_field :email%>
  </div>

  <div>
    <%= f.label :password%>
    <%= f.password_field :password%>
  </div>

  <%= f.submit '註冊帳號' %>
<% end %>

這樣我們就完成註冊會員的功能了!
明天再繼續介紹 「會員登入」


上一篇
Rails 手工打造自己的部落格 - Soft Delete 軟刪除
下一篇
Rails 手工打造自己的部落格 21 - 會員登入(上)
系列文
Rails 手工打造自己的部落格 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言